package com.cd.university.service;

import com.cd.university.common.RestResult;
import com.cd.university.controller.form.ProjectForm;
import com.cd.university.controller.form.ProjectIdForm;

import java.util.List;

/**
 * @author 陈栋
 * @create 2021/10/15 16:57
 */
public interface ProjectService {

    /**
     * 项目提交申请
     * @param form 项目表单
     * @return 统一响应格式
     */
    public RestResult projectApply(ProjectForm form);


    /**
     * 预先创建一个项目，目的是为了获得自增id
     * @return 统一响应格式
     */
    public RestResult advanceInsertProject();

    /**
     * 根据用户id，搜索所有的项目
     * @param userId 用户id
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @return
     */
    public RestResult searchProjectByUserId(Integer userId, Integer pageNum,Integer pageSize);

    /**
     * 根据项目的id搜索项目的所有信息
     * @param projectIdList 项目id集合
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @return 统一响应格式
     */
    public RestResult searchProjectList(List<ProjectIdForm> projectIdList, Integer pageNum, Integer pageSize);

    /**
     * 查询所有的项目信息
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @return 统一响应格式
     */
    public RestResult searchAllProject(Integer pageNum, Integer pageSize);

    /**
     * 根据用单位id（可携带用户id）搜索可以结题的项目
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @param userId 用户id（可选）
     * @param departmentId 单位id
     * @return 统一响应格式
     */
    public RestResult getProjectByDepartmentId(Integer pageNum,
                                               Integer pageSize,
                                               Integer userId,
                                               Integer departmentId);

    /**
     * 根据用单位id和用户id搜索可以结题的项目
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @param userId 用户id（可选）
     * @param departmentId 单位id
     * @return 统一响应格式
     */
    public RestResult getProjectByDepartmentAndUserId(Integer pageNum,
                                                      Integer pageSize,
                                                      Integer userId,
                                                      Integer departmentId);

    /**
     * 根据用户id（可选）和项目名字查询已经结题的项目
     * @param pageNum 页数
     * @param pageSize 每页个数
     * @param userId 用户id（可选）
     * @param projectName 项目的名字
     * @return
     */
    public RestResult getProjectByName(Integer pageNum,
                                       Integer pageSize,
                                       Integer userId,
                                       String projectName);

    /**
     * 根据状态id（可选）部门id（可选），搜索用户的项目
     * @param userId 用户id
     * @param statusId 状态id（可选）
     * @param departmentId 部门id（可选）
     * @param pageNum 页数
     * @param pageSize 每页条数
     * @return
     */
    public RestResult getProjectByStIdAndDeId(Integer userId,
                                              Integer statusId,
                                              Integer departmentId,
                                              Integer pageNum,
                                              Integer pageSize);

    public void loadProjectsToRedis();

    public void deleteAdvanceProject();

}
